雖然可以從Firebase取得雲端資料,但有時需要的資料量非常龐大,從雲端讀取會花費不少時間,這時如果把資料改存在手機上,直接從本地讀取,讀取的時間就能減少許多!因此在「顏色」app中,我決定將不須與朋友共享的內容存到Core Data中。
Core Data由蘋果公司開發,是設計用來儲存資料的框架,背後雖然以SQLite的資料格式運作,但簡化許多資料庫的處理,讓開發人員不用了解SQL指令也可以快速的為應用程式建立並使用資料庫。
參考資料:https://hsin.tw/swiftgo/database/coredata.html
開啟建置的Xcode專案,點擊「Demo.xcdatamodeled」檔案後,點擊紅框「Add Entity」按鈕
「Entity」可視為事件的資料夾,裡面含有各種事件資訊,命名時第一個字必須是英文大寫。「顏色」app需要儲存使用者的資料,右鍵雙擊剛新增的Entity,將其命名為「User」
點擊紅框中的「+」新增使用者的事件內容,這裡新增名稱為「nickName」、「firestoreID」的Attribute,用來儲存使用者的「暱稱」和「firebase的ID」,並設定型別皆為「String」,以字串的型別儲存資料
為了判斷不同的使用者,新增名稱為「uuid」的Attribute來儲存使用者的「唯一識別碼」,Core Data有提供「UUID」的型別,之後可使用Core Data函式自動生成UUID
依照第3點和第4點的做法,可新增多個事件資料夾,接下來就可以設定資料夾與資料夾間的關係。在「顏色」app裡,我額外新增「DateInfo」來儲存使用者每日事件,裡面有「date」、「eventCount」、「uuid」三個事件Attribute
「顏色」app提供使用者每日新增多筆資料,因此需設置「User」和「DateInfo」資料夾間的關係。點擊紅框中的「+」新增關係,這裡新增名稱為「toManyDate」的Relationship,並將關係對象指定為「DateInfo」的資料夾
由於一個「User」會有產生許多的「DateInfo」資料,點擊紅框的圖示,將Type類型選擇「To Many」,點選後會發現「toManyDate」前的圖示由「O」變成「M」
設定完「User」對「DateInfo」的關係後,接下來設定「DateInfo」對「User」的關係,因為一筆「DateInfo」資料只會對到一個「User」,因此「toOneUser」的Type類型選擇「To One」。Inverse下拉選單中選擇「toManyDate」,設定「toManyDate」和「toOneUser」為相互關係
點選「User」資料夾,確認「toManyDate」的Inverse是否自動設為「toOneUser」,若有則代表關係設定成功